package excel

import (
	"github.com/xuri/excelize/v2"
)

// 标准Sheet, 功能多
type Sheet struct {
	index int
	name  string
	col   int // 当前列坐标
	row   int // 当前行坐标
}

// 流式Sheet, 适合大量数据, 只有基本功能
type SheetStream struct {
	*Sheet
	w *excelize.StreamWriter
}

// (流)设置表头
// 目前只支持简单的表头, 从A1位置开始
func (sheet *SheetStream) SetHeader(headers []any) error {
	cellName, e := excelize.CoordinatesToCellName(1, 1)
	if e == nil {
		sheet.col = 1
		sheet.row = 1
		return sheet.w.SetRow(cellName, headers)
	}

	return e
}

// (流)设置写入数据
func (sheet *SheetStream) WriteData(values []any) error {
	// 行位置+1
	sheet.row++

	// 获取位置并写入数据
	cellName, e := excelize.CoordinatesToCellName(1, sheet.row)
	if e == nil {
		return sheet.w.SetRow(cellName, values)
	}

	return e
}

// (流)结束写入
func (sheet *SheetStream) EndPush() error {
	return sheet.w.Flush()
}
